[アップデート] GitLab ランナーとして AWS CodeBuild を使えるようになりました
いわさです。
先日、AWS CodeBuild を GitLab (GitLab.com) のランナーとして使えるようになったというアップデートアナウンスがありました。
GitLab では CI/CD パイプラインの実行をランナー上で行います。
ランナーには GitLab がマネージドに提供する GitLab-hosted runners と、自己調達したマシン上でビルドなどを実行する self-managed runners(GitHub でいう Self Hosted Runner)があります。
セキュリティやパフォーマンスなど様々な理由から後者を採用するケースもあるのですが、例えば AWS 上に構築しようとすると仮想マシンをプロビジョニングしてランナーのインストールなどセットアップと管理が必要となります。
今回のアップデートで GitLab self-managed runners を特にプロビジョニングなど不要で CodeBuild 上で実行出来るようになります。
仕組みとしては Webhook が使われています。そのため事前に GitLab.com 上にセルフホスト環境の登録は不要でした。
今回以下の手順に従ってセットアップしてみましたので紹介します。全リージョン対応しているのですが、なぜか東京リージョンだと Webhook 作成に失敗しましたのでその点もご紹介します。
設定方法
CodeConnections 設定
まず、GitLab.com へ CodeBuild から接続出来る必要がありまして、CodeConnections の接続を作成しておきます。
ここは今回のアップデートで特に変更された内容はありません。
普通に GitLab を選択して作成し、GitLab 側で認証・認可操作をするだけです。
CodeBuild プロジェクトの作成
続いて CodeBuild プロジェクトを作成します。
ソースプロバイダには GitLab を選択します。ここは普通に選択するだけです。
続いて、ウェブフックイベントを構成出来るので、ここで次のように「WORKFLOW_JOB_QUEUED」を選択します。ここが最初のポイントです。
続いて環境です。
嬉しいことに EC2 の他に Lambda も選択することが出来ます。すごい。
また、CodeBuild 側でデフォルトの設定を行う形にはなるのですが、GitLab のパイプライン構成ファイル上でこの設定はオーバーライド出来ます。
サポートされているコンピューティングイメージの詳細については以下の公式ドキュメントを参考にしてください。
ビルドスペックについてですが、デフォルトでは Buildspec は無視されます。GitLab パイプライン構成ファイルの内容が実行されます。
ただし、こちらも GitLab パイプライン構成ファイル上の設定になるのですが、GitLab 側で buildspec-override タグを設定することで Buildspec を有効化も出来ます。
GitLab プロジェクト側の設定
CodeBuild プロジェクトの作成に成功すると、GitLab プロジェクト側に新しいウェブフックが作成されています。
あとは GitLab 側で CI/CD パイプラインの設定をしてやるのですが、一点注意がありまして CodeBuild と関連付けするためのタグをビルドジョブごとに指定する必要があります。こんな感じです。
どうやらフォーマットが厳格なようで「codebuild-<codebuild-project-name>-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME
」の形式で<codebuild-project-name>
を AWS CodeBuild のプロジェクト名に変更して設定します。
実行
あとは実行するだけです。GitLab 側でリポジトリの更新を行います。
パイプラインジョブの結果を見ると成功しています。
実行結果も GitLab 側で確認出来ますね。
CodeBuild 側も確認してみると、こちらも成功しています。
そしてログを確認してみると、どうやら GitLab Runner のダウンロードやインストールが行われているようですね。
東京リージョンだとなぜか CodeBuild プロジェクトの作成に失敗する
最初東京リージョンで検証していたのですが、CodeBuild プロジェクトの作成時にエラーが表示されていました。
ウェブフックの作成に失敗しました
Failed to login to GitLab, please reconnect your account
上記状態だと GitLab 側にウェブフックが作成されておらず、ビルド連携が出来ていません。
Connection やコンピューティングの設定を見直してみたのですが解決せず。
結局バージニア北部リージョン(us-east-1)で実行することですんなり作成に成功しました。
フィードバックしておこうと思いますが、直近で試されようとしている方はご注意ください。
さいごに
本日は GitLab ランナーとして AWS CodeBuild を使えるようになったので使ってみました。
CodeBuild 環境が使えるとなると、今まで EC2 などでホスティングしていた Self-Managed Runner 環境の見直しが出来るかもしれませんね。